package com.shujia.youhua

import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

//查看repartition源码发现,底层是调用coalesce函数,也就是说我们可以直接调用coalesce函数进行重分区,并且可以指定是否产生shuffle
object CoalesceDemo {
  def main(args: Array[String]): Unit = {
    val ss: SparkSession = SparkSession.builder()
      .master("local")
      .appName("缓存，避免使用重复的RDD")
      .getOrCreate()
    val sc: SparkContext = ss.sparkContext

    val lineRDD: RDD[String] = sc.textFile("spark/data/students.txt")
    println(s"===========lineRDD的分区数为：${lineRDD.getNumPartitions}==================")

    //使用coalesce将分区数变成10个,返回一个新的RDD
    //如果只传入分区数,默认不会产生shuffle
    val rdd1: RDD[String] = lineRDD.coalesce(10,shuffle = true)
    println(s"===========rdd1的分区数为：${rdd1.getNumPartitions}==================")
//    rdd1.foreach(println)

    //使用coalesce将分区数变成1个,返回一个新的RDD
    val rdd2: RDD[String] = rdd1.coalesce(1)
    println(s"===========rdd2的分区数为：${rdd2.getNumPartitions}==================")
    rdd2.foreach(println)

    while (true){

    }
  }
}
